/**
 *
 *  两种方式：
 *  1. 通过 md5 加密,不可逆. 相同输入, 相同输出
 *
 *
 *  2. RSA.
 *   需要公钥和私钥
 */

let crypto = require('crypto');
let fs = require('fs');
let path = require('path');


// 1. md5  不可逆. 相同输入 相同输出
function test_md5() {
    let content = 'password';

    let md5 = crypto.createHash('md5');
    md5.update(content);

    let sign = md5.digest('hex');
    console.log(sign);


//解密
    let verifysign = crypto.createHash('md5').update(content, 'utf8').digest("hex");
//得到verifysign
    if (verifysign == sign) {
        console.log("验证成功！");
    }
    if (verifysign != sign) {
        console.log("验证失败！");
    }
}

// 2. RSA.
// 需要公钥和私钥
function test_rsa_encrypt(content) {
    let privatePem = fs.readFileSync(path.join(__dirname,'rsa_private_key.pem'));

    // 加密
    let sign = crypto.createSign('RSA-SHA256');
    sign.update(content);

    let sig = sign.sign(privatePem.toString(),'hex');
    console.log('sig:',sig);
    return sig;
}

function test_rsa_decrypt(encrypt_content) {
    let publicPem = fs.readFileSync(path.join(__dirname,'rsa_public_key.pem'));
    let verify = crypto.createVerify('RSA-SHA256');
    verify.update('aaabbb');
    console.log('-------------');
    console.log(verify.verify(publicPem.toString(), encrypt_content, 'hex'));
}

// test
let content = 'aaabbb';
test_rsa_decrypt(test_rsa_encrypt(content));

// test_md5();
